package com.iwuyc.tools.commons.util.collection;

import java.util.Collection;
import java.util.HashMap;

/**
 * 基于hashmap的多值Map
 *
 * @param <K>  key的类型
 * @param <V>  value的类型
 * @param <CT> 集合的类型
 */
public abstract class MultiHashMap<K, V, CT extends Collection<V>> extends HashMap<K, CT> implements MultiMap<K, V, CT> {
    /**
     * 创建一个集合
     *
     * @param key 存储的key
     * @return 创建的集合
     */
    protected abstract CT createCollection(K key);

    @Override
    public CT getCollection(K key) {
        return this.computeIfAbsent(key, this::createCollection);
    }
}
